
/**
如果是不带默认参数，也不是严格模式，那么对于参数的修改会反映到 arguments 数组，属于 es5 非严格模式
如果是带默认参数或者是严格模式，那么对于参数的修改不会反映到 arguments 数组，属于 es6 或者 es5 非严格模式
 */

function test0(a, b) {
    'use strict'
    console.log(arguments);
    console.log(a === arguments[0]);
    console.log(b === arguments[1]);
    a = 'a';
    b = 'b';
    console.log(a, b, arguments);
    console.log(a === arguments[0]);
    console.log(b === arguments[1]);
}

test0(1, 2);

// { '0': 1, '1': 2 }
// true
// true
// a b { '0': 1, '1': 2 }
// false
// false

function test1(a, b = 'c') {
    console.log(arguments);
    console.log(a === arguments[0]);
    console.log(b === arguments[1]);
    a = 'a';
    b = 'b';
    console.log(a, b, arguments);
    console.log(a === arguments[0]);
    console.log(b === arguments[1]);
}

test1(1, 2);

// { '0': 1, '1': 2 }
// true
// true
// a b { '0': 1, '1': 2 }
// false
// false

function test2(a, b) {
    console.log(arguments);
    console.log(a === arguments[0]);
    console.log(b === arguments[1]);
    a = 'a';
    b = 'b';
    console.log(a, b, arguments);
    console.log(a === arguments[0]);
    console.log(b === arguments[1]);
}

test2(1, 2);

// { '0': 1, '1': 2 }
// true
// true
// a b { '0': 'a', '1': 'b' }
// true
// true